# 1.	编程实现：仔细业务之间的包含关系，并完成以下编程需求，要适当提高代码的可复用性。
# a)	用户程序：账号（str：系统随机产生8位数字）、姓名(str)、密码(int:6位数字)、地址、存款余额(int)、开户行（银行的名称（str））
# b)	地址程序：c国家(str)、省份(str)、街道(str)、门牌号(str)
# c)	银行程序：能存储100用户的库(字典)、本银行名称（比如：中国工商银行的昌平支行,str）

# i.	银行业务功能
# 1.	添加用户（传入参数：用户的所有信息。返回值：整型值（1：成功，2：用户已存在，3：用户库已满））
# a)	业务逻辑：
# 	先检查该用户的账号在库里是否存在。若不存在则在用户库里添加一个该用户并返回代号1
# 	若存在则返回代号2。另外在添加用户的时候检测用户库是否已注册满，若已满则返回代号3
import random
# 账号（str：系统随机产生8位数字）、姓名(str)、密码(int:6位数字)、地址、存款余额(int)、开户行（银行的名称（str））

users=[]
number=str(random.randint(10000000, 99999999))
user1 = {
    "account":number,"name":"zhang","password":123456,"address":"beijing","balance":1000,"bank":"ICBC"
}

def add_user(user):
    if user["account"] not in users:
        if len(users)>100:
            return 3
        else:
            users.append(user)
            return 1     
    else:
        return 2


# 2.	存钱（传入值：用户的账号、存取的金额。返回值：布尔类型值）
# a)	业务逻辑：
# 	先根据传入的账号信息查询用户库里是否有该用户。若没有则返回False
# 	若有，则将该用户的金额存进去。

def save_money(user,amount):
    if user["account"] in users:
        user["balance"]+=amount
        return True
    else:
        return False
    
# 3.	取钱（传入值：用户的账号，用户密码，取钱金额。返回值：整型值（0：正常，1：账号不存在，2：密码不对，3：钱不够））
# a)	业务逻辑：
# 	先根据账号信息来查询该用户是否存在，若不存在，则返回代号1，
# 	若存在，则继续判断密码是否正确，若不正确，则返回代号2。
# 	若账号密码都正确，则继续判断当前用户的金额是否满足要取出的钱，若不满足，则返回代号3，
# 	若满足，则将该用户的金额减去。
def get_money(user,password,amount):
    if user["account"] in users:
        if user["password"]==password:
            if user["balance"]>=amount:
                user["balance"]-=amount
                return 0
            else:
                return 3
        else:
            return 2
    else:
        return 1




# 4.	转账（传入值：转出的账号，转入的账号，转出账号的密码，转出的金额。返回值：0：正常，1：账号不对，2密码不对，3钱不够）
# a)	业务逻辑：
# 	先查询用户库是否存在转出和转入的账号，若不存在则返回代号,1，
# 	若账号都存在则继续判断转出账号的密码是否正确，若不正确，则返回2，
# 	若正确则继续判断要转出的金额是否足够，若不够则返回3，
# 	否则正常转出，转出的账号用户金额要相对应的减少，转入的金额相对应的增加。



def transfer_money(user1,user2,password,amount):
    if user1["account"] in users and user2["account"] in users:
        if user1["password"]==password:
            if user1["balance"]>=amount:
                user1["balance"]-=amount
                user2["balance"]+=amount
                return 0
            else:
                return 3
        else: 
            return 2
    else:
        return 1




# 5.	查询账户功能（传入值：账号，账号密码，返回值：空）
# a)	业务逻辑：
# 	先根据账号判断用户库是否存在该用户，若不存在则打印提示信息：该用户不存在。
# 	否则继续判断密码是否正确。若不正确则打印相对应的错误信息。
# 	若账号和密码都正确，则将该用户的信息都打印出来，比如：当前账号：xxxx,密码:xxxxxx,余额：xxxx元，用户居住地址：xxxxxxxxxxxxx，当前账户的开户行：xxxxxxxxxx.
# d)	界面程序：在执行该入口程序时，就打印银行业务选择菜单：比如：
# i.	 
# ii.	然后就开始处理各种输入操作，直到业务处理完成!

def query_account(user,password):
    if user["account"] in users:
        if user["password"]==password:
            print("当前账号：{}，密码: {}，余额：{}元，用户居住地址：{}，当前账户的开户行：{}".format(user["account"],user["password"],user["balance"],user["address"],user["bank"]))
        else:
            print("密码不对")
    else:
        print("该用户不存在")
        
# d)	界面程序：在执行该入口程序时，就打印银行业务选择菜单：比如：
# i.	 
# ii.	然后就开始处理各种输入操作，直到业务处理完成!
print("*****************************")
print("*          ICBC             *")
print("*       账户管理系统        *")
print("*          v1.0             *")
print("*****************************")  
print("*         1.开户            *")
print("*         2.存钱            *")
print("*         3.取钱            *")
print("*         1.转账            *")
print("*         1.查询            *")
print("*         1.Bye!            *")
print("*****************************")  






